/**
 * 模拟Promise.race
 * @param  {iterator} proms 可迭代对象
 * @return {Object} 返回的Promise与第一个有结果的一致
*/
Promise.myRace = function(proms) {
  // 若传入参数为 undefined  | null | 不是迭代器(无[Symbol.iterator]方法)
  if(proms == null || typeof proms[Symbol.iterator] !== 'function') {
    throw new TypeError(`${proms} is not a iterable`)
  }

  proms = [...proms]

  return new Promise((resolve, reject) => {
    for(const prom of proms) {
      Promise.resolve(prom).then(resolve).catch(reject)
    }
  })
}

// // 测试
// const p1 = new Promise(resolve => {
//   setTimeout(() => {
//     resolve(1)
//   },100)
// })
// const p2 = new Promise((resolve,reject) => {
//   setTimeout(() => {
//     reject(2)
//   })
// })
// const p3 = new Promise((resolve,reject) => {
//   setTimeout(() => {
//     resolve(3)
//   })
// })
// Promise.myRace([p1,p2,p3]).then(res => {
//   console.log(res);
// }).catch(err => {
//   console.log(err);
// })
// // 打印：2
